; generated by Component: ARM Compiler 5.06 update 5 (build 528) Tool: ArmCC [4d3621]
; commandline ArmCC [--list --debug -c --asm --interleave -o.\obj\uart.o --asm_dir=.\Obj\ --list_dir=.\Obj\ --depend=.\obj\uart.d --cpu=Cortex-M3 --apcs=interwork -O3 --diag_suppress=9931 -I. -I.\Core_CM3 -IC:\Keil\ARM\RV31\INC -IC:\Keil\ARM\CMSIS\Include -IC:\Keil\ARM\INC\NXP -D__UVISION_VERSION=524 --omf_browse=.\obj\uart.crf Debug\uart.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  conv PROC
;;;24     //*****************************************************//
;;;25     char conv(char c) {
000000  280a              CMP      r0,#0xa
000002  d201              BCS      |L1.8|
000004  3030              ADDS     r0,r0,#0x30
;;;26     	if (c<10)
;;;27     	  c+=0x30;
000006  e000              B        |L1.10|
                  |L1.8|
000008  3037              ADDS     r0,r0,#0x37
                  |L1.10|
00000a  b2c0              UXTB     r0,r0
;;;28         else
;;;29     	  c+=0x37;
;;;30     	return c;
;;;31     }
00000c  4770              BX       lr
;;;32     
                          ENDP

                  UART_init PROC
;;;35     //*****************************************************//
;;;36     void UART_init(unsigned int baud) {
00000e  492b              LDR      r1,|L1.188|
;;;37       unsigned int divisor = (64000000 / 16) / baud;
000010  fbb1f1f0          UDIV     r1,r1,r0
;;;38     
;;;39       // uart0 is clocked from cclk/1
;;;40       LPC_SC->PCLKSEL0 &= ~(0x3UL << 6);
000014  482a              LDR      r0,|L1.192|
000016  f8d021a8          LDR      r2,[r0,#0x1a8]
00001a  f02202c0          BIC      r2,r2,#0xc0
00001e  f8c021a8          STR      r2,[r0,#0x1a8]
;;;41       LPC_SC->PCLKSEL0 |=  (0x1UL << 6);
000022  f8d021a8          LDR      r2,[r0,#0x1a8]
000026  f0420240          ORR      r2,r2,#0x40
00002a  f8c021a8          STR      r2,[r0,#0x1a8]
;;;42     
;;;43       LPC_UART0->LCR = 0x83;                   // 8 bit, 1 stop bit, no parity, enable DLAB 
00002e  4825              LDR      r0,|L1.196|
000030  2283              MOVS     r2,#0x83
000032  7302              STRB     r2,[r0,#0xc]
;;;44       LPC_UART0->DLL = divisor & 0xFF;
000034  7001              STRB     r1,[r0,#0]
;;;45       LPC_UART0->DLM = (divisor >> 8) & 0xFF;
000036  0a09              LSRS     r1,r1,#8
000038  7101              STRB     r1,[r0,#4]
;;;46       LPC_UART0->LCR &= ~0x80;                 // Disable DLAB 
00003a  7b01              LDRB     r1,[r0,#0xc]
00003c  f0210180          BIC      r1,r1,#0x80
000040  7301              STRB     r1,[r0,#0xc]
;;;47       LPC_UART0->FCR = 1;
000042  2101              MOVS     r1,#1
000044  7201              STRB     r1,[r0,#8]
;;;48     
;;;49       LPC_PINCON->PINSEL0 |= 0x00000050;           // RxD0 and TxD0 
000046  4820              LDR      r0,|L1.200|
000048  6801              LDR      r1,[r0,#0]
00004a  f0410150          ORR      r1,r1,#0x50
00004e  6001              STR      r1,[r0,#0]
;;;50     }
000050  4770              BX       lr
;;;51     
                          ENDP

                  getchar PROC
;;;52     int getchar (void) {
000052  481c              LDR      r0,|L1.196|
;;;53      				
;;;54       if (LPC_UART0->LSR & 0x01)
000054  7d01              LDRB     r1,[r0,#0x14]
000056  07c9              LSLS     r1,r1,#31
000058  d001              BEQ      |L1.94|
;;;55         return (LPC_UART0->RBR);
00005a  7800              LDRB     r0,[r0,#0]
;;;56       else
;;;57         return (-1);
;;;58     }
00005c  4770              BX       lr
                  |L1.94|
00005e  f04f30ff          MOV      r0,#0xffffffff        ;57
000062  4770              BX       lr
;;;59     
                          ENDP

                  putchar PROC
;;;60     int putchar(int ch) {
000064  4917              LDR      r1,|L1.196|
;;;61     
;;;62       if (ch == '\n')  {
000066  280a              CMP      r0,#0xa
000068  d104              BNE      |L1.116|
                  |L1.106|
;;;63         while (!(LPC_UART0->LSR & 0x20));
00006a  7d0a              LDRB     r2,[r1,#0x14]
00006c  0692              LSLS     r2,r2,#26
00006e  d5fc              BPL      |L1.106|
;;;64         LPC_UART0->THR = CR;
000070  220d              MOVS     r2,#0xd
000072  700a              STRB     r2,[r1,#0]
                  |L1.116|
;;;65       }
;;;66       while (!(LPC_UART0->LSR & 0x20));
000074  7d0a              LDRB     r2,[r1,#0x14]
000076  0692              LSLS     r2,r2,#26
000078  d5fc              BPL      |L1.116|
;;;67       return (LPC_UART0->THR = ch);
00007a  b2c0              UXTB     r0,r0
00007c  7008              STRB     r0,[r1,#0]
;;;68      }
00007e  4770              BX       lr
;;;69     
                          ENDP

                  print PROC
;;;70     void print(char * str) {
000080  b510              PUSH     {r4,lr}
000082  4604              MOV      r4,r0
;;;71       int i=0;
000084  2300              MOVS     r3,#0
                  |L1.134|
;;;72     
;;;73       while(1) {
;;;74     	putchar(str[i]);
000086  5ce0              LDRB     r0,[r4,r3]
000088  f7fffffe          BL       putchar
;;;75     	if (str[i]=='\0')
00008c  5ce0              LDRB     r0,[r4,r3]
00008e  2800              CMP      r0,#0
000090  d001              BEQ      |L1.150|
000092  1c5b              ADDS     r3,r3,#1
000094  e7f7              B        |L1.134|
                  |L1.150|
;;;76     	  break;
;;;77     	i++;
;;;78       }
;;;79     }
000096  bd10              POP      {r4,pc}
;;;80     
                          ENDP

                  printhexa PROC
;;;81     void printhexa(char num){
000098  b500              PUSH     {lr}
00009a  4603              MOV      r3,r0
;;;82      
;;;83       putchar(conv((num>>4)&0x0F));
00009c  0900              LSRS     r0,r0,#4
00009e  f7fffffe          BL       conv
0000a2  f7fffffe          BL       putchar
;;;84       putchar(conv(num&0x0F));
0000a6  f003000f          AND      r0,r3,#0xf
0000aa  f7fffffe          BL       conv
0000ae  f7fffffe          BL       putchar
;;;85       putchar(' ');
0000b2  2020              MOVS     r0,#0x20
0000b4  f85deb04          POP      {lr}
0000b8  e7fe              B        putchar
;;;86     }
;;;87     
                          ENDP

                  printascii PROC
;;;88     void printascii(char num){
0000ba  e7fe              B        putchar
;;;89      
;;;90       putchar(num);
;;;91     }
;;;92     
                          ENDP

                  |L1.188|
                          DCD      0x003d0900
                  |L1.192|
                          DCD      0x400fc000
                  |L1.196|
                          DCD      0x4000c000
                  |L1.200|
                          DCD      0x4002c000
